using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._DataManagementTools._Raster._MosaicDataset
{
    /// <summary>
    /// <para>Remove Rasters From Mosaic Dataset</para>
    /// <para>Removes selected raster datasets from a mosaic dataset.</para>
    /// <para>从镶嵌数据集中移除所选栅格数据集。</para>
    /// </summary>    
    [DisplayName("Remove Rasters From Mosaic Dataset")]
    public class RemoveRastersFromMosaicDataset : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public RemoveRastersFromMosaicDataset()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_mosaic_dataset">
        /// <para>Mosaic Dataset</para>
        /// <para>The mosaic dataset containing the rasters you want to remove</para>
        /// <para>包含要移除的栅格的镶嵌数据集</para>
        /// </param>
        public RemoveRastersFromMosaicDataset(object _in_mosaic_dataset)
        {
            this._in_mosaic_dataset = _in_mosaic_dataset;
        }
        public override string ToolboxName => "Data Management Tools";

        public override string ToolName => "Remove Rasters From Mosaic Dataset";

        public override string CallName => "management.RemoveRastersFromMosaicDataset";

        public override List<string> AcceptEnvironments => ["extent"];

        public override object[] ParameterInfo => [_in_mosaic_dataset, _where_clause, _update_boundary.GetGPValue(), _mark_overviews_items.GetGPValue(), _delete_overview_images.GetGPValue(), _delete_item_cache.GetGPValue(), _remove_items.GetGPValue(), _update_cellsize_ranges.GetGPValue(), _out_mosaic_dataset];

        /// <summary>
        /// <para>Mosaic Dataset</para>
        /// <para>The mosaic dataset containing the rasters you want to remove</para>
        /// <para>包含要移除的栅格的镶嵌数据集</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Mosaic Dataset")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_mosaic_dataset { get; set; }


        /// <summary>
        /// <para>Query Definition</para>
        /// <para><xdoc>
        ///   <para>An SQL expression to select the raster datasets that you want removed from the mosaic dataset.</para>
        ///   <para>There must be a selection or a query specified; otherwise, the tool will not run. If you want to delete all the records from the mosaic dataset, specify a query that would select all the rasters, such as "OBJECTID>=0".</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>一个 SQL 表达式，用于选择要从镶嵌数据集中移除的栅格数据集。</para>
        ///   <para>必须指定一个选择或查询;否则，该工具将无法运行。如果要从镶嵌数据集中删除所有记录，请指定一个将选择所有栅格的查询，例如“OBJECTID>=0”。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Query Definition")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _where_clause { get; set; } = null;


        /// <summary>
        /// <para>Update Boundary</para>
        /// <para><xdoc>
        ///   <para>Updates the boundary polygon of a mosaic dataset. By default, the boundary merges all the footprint polygons to create a single boundary representing the extent of the valid pixels.</para>
        ///   <bulletList>
        ///     <bullet_item>Checked—The boundary will be updated. This is the default.</bullet_item><para/>
        ///     <bullet_item>Unchecked—The boundary will not be updated.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>更新镶嵌数据集的边界面。默认情况下，边界会合并所有封装面，以创建表示有效像素范围的单个边界。</para>
        ///   <bulletList>
        ///     <bullet_item>选中 - 边界将更新。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>未选中 - 边界将不更新。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Update Boundary")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _update_boundary_value _update_boundary { get; set; } = _update_boundary_value._true;

        public enum _update_boundary_value
        {
            /// <summary>
            /// <para>UPDATE_BOUNDARY</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("UPDATE_BOUNDARY")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>NO_BOUNDARY</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("NO_BOUNDARY")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Mark Affected Overviews</para>
        /// <para><xdoc>
        ///   <para>When the rasters in a mosaic catalog have been removed, any overviews created using those rasters may no longer be accurate; therefore, they can be identified so they can be updated or removed if they are no longer needed.</para>
        ///   <bulletList>
        ///     <bullet_item>Checked—The affected overviews will be identified. This is the default.</bullet_item><para/>
        ///     <bullet_item>Unchecked—The affected overviews will not be identified.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>移除镶嵌目录中的栅格后，使用这些栅格创建的任何概视图可能不再准确;因此，可以识别它们，以便在不再需要它们时可以更新或删除它们。</para>
        ///   <bulletList>
        ///     <bullet_item>选中 - 将识别受影响的概览。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>未选中 - 将不识别受影响的概览。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Mark Affected Overviews")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _mark_overviews_items_value _mark_overviews_items { get; set; } = _mark_overviews_items_value._true;

        public enum _mark_overviews_items_value
        {
            /// <summary>
            /// <para>MARK_OVERVIEW_ITEMS</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("MARK_OVERVIEW_ITEMS")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>NO_MARK_OVERVIEW_ITEMS</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("NO_MARK_OVERVIEW_ITEMS")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Delete Overview Images</para>
        /// <para><xdoc>
        ///   <para>Remove overviews associated with the selected rasters.</para>
        ///   <bulletList>
        ///     <bullet_item>Checked—Delete overviews associated with the selected rasters. This is the default.</bullet_item><para/>
        ///     <bullet_item>Unchecked—Do not delete the overviews associated with the selected rasters.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>移除与所选栅格关联的概视图。</para>
        ///   <bulletList>
        ///     <bullet_item>选中 - 删除与所选栅格关联的概视图。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>未选中 - 不删除与所选栅格关联的概视图。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Delete Overview Images")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _delete_overview_images_value _delete_overview_images { get; set; } = _delete_overview_images_value._true;

        public enum _delete_overview_images_value
        {
            /// <summary>
            /// <para>DELETE_OVERVIEW_IMAGES</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("DELETE_OVERVIEW_IMAGES")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>NO_DELETE_OVERVIEW_IMAGES</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("NO_DELETE_OVERVIEW_IMAGES")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Delete Item Cache</para>
        /// <para><xdoc>
        ///   <para>Remove cache that is based on any source raster datasets that you are removing from the mosaic dataset.</para>
        ///   <bulletList>
        ///     <bullet_item>Checked—Remove the item and its corresponding cache. This is the default.</bullet_item><para/>
        ///     <bullet_item>Unchecked—Keep the cache as part of the mosaic dataset.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>移除基于要从镶嵌数据集中移除的任何源栅格数据集的缓存。</para>
        ///   <bulletList>
        ///     <bullet_item>选中 （Checked） - 移除项目及其相应的缓存。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>未选中 - 将缓存保留为镶嵌数据集的一部分。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Delete Item Cache")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _delete_item_cache_value _delete_item_cache { get; set; } = _delete_item_cache_value._true;

        public enum _delete_item_cache_value
        {
            /// <summary>
            /// <para>DELETE_ITEM_CACHE</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("DELETE_ITEM_CACHE")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>NO_DELETE_ITEM_CACHE</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("NO_DELETE_ITEM_CACHE")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Remove Mosaic Dataset Items</para>
        /// <para><xdoc>
        ///   <para>Remove item, cache, overviews, and raster datasets. Or, remove only the cache and overviews, and keep the raster datasets.</para>
        ///   <bulletList>
        ///     <bullet_item>Checked—Remove the item from the mosaic dataset. This is the default.</bullet_item><para/>
        ///     <bullet_item>Unchecked—Remove the item cache and any associated overviews, but not the item itself.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>移除项目、缓存、概视图和栅格数据集。或者，仅移除缓存和概视图，并保留栅格数据集。</para>
        ///   <bulletList>
        ///     <bullet_item>选中 - 从镶嵌数据集中移除项目。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>未选中 - 移除项目缓存和任何关联的概视图，但不移除项目本身。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Remove Mosaic Dataset Items")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _remove_items_value _remove_items { get; set; } = _remove_items_value._true;

        public enum _remove_items_value
        {
            /// <summary>
            /// <para>REMOVE_MOSAICDATASET_ITEMS</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("REMOVE_MOSAICDATASET_ITEMS")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>NO_REMOVE_MOSAICDATASET_ITEMS</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("NO_REMOVE_MOSAICDATASET_ITEMS")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Update Cell Size Ranges</para>
        /// <para><xdoc>
        ///   <para>Update cell size ranges for the mosaic dataset. Choose this option if you are removing all of the imagery at a specific cell size.</para>
        ///   <bulletList>
        ///     <bullet_item>Checked—Update the cell size ranges. This is the default.</bullet_item><para/>
        ///     <bullet_item>Unchecked—Do not update the cell size ranges.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>更新镶嵌数据集的像元大小范围。如果要移除特定像元大小的所有影像，请选择此选项。</para>
        ///   <bulletList>
        ///     <bullet_item>选中 （Checked） - 更新像元大小范围。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>未选中 - 不更新像元大小范围。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Update Cell Size Ranges")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _update_cellsize_ranges_value _update_cellsize_ranges { get; set; } = _update_cellsize_ranges_value._true;

        public enum _update_cellsize_ranges_value
        {
            /// <summary>
            /// <para>UPDATE_CELL_SIZES</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("UPDATE_CELL_SIZES")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>NO_CELL_SIZES</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("NO_CELL_SIZES")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Updated Mosaic Dataset</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Updated Mosaic Dataset")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _out_mosaic_dataset { get; set; }


        public RemoveRastersFromMosaicDataset SetEnv(object extent = null)
        {
            base.SetEnv(extent: extent);
            return this;
        }

    }

}